// where-clause tests for NRC generics
// -----------------------------------
// 本文件验证 `where` 约束作为语法糖时的行为：
// - 语法上支持 `func` / `type ... struct` 上的 where 子句；
// - 语义上仅作为对现有 GenericParam.constraints 的填充，不引入新 AST 结构。

// Marker 类型，用作泛型约束目标
type Marker struct {
    value int
}

// 使用内联约束语法的泛型结构体
type Wrapper<T: Marker> struct {
    inner T
}

// 使用 where 子句语法糖的泛型结构体（Go-style 声明）
type Wrapper2<T> struct
    where T: Marker {
    inner T
}

// 使用 where 子句约束的泛型函数
func wrap_value<T>(value T) Wrapper<T>
    where T: Marker {
    return Wrapper<T>{
        inner: value,
    }
}

func test_where_clause_basic() {
    var m Marker = Marker{
        value: 42,
    }

    // 这里只验证：
    // - 带 where 子句 / inline 约束 的泛型声明可以被解析并通过静态检查；
    // - 非泛型代码仍然可以正常运行。
    assert(m.value == 42, "Marker value should be preserved")
}

func test_where_clause_suite() {
    test_where_clause_basic()
}
